// 'use strict';
// const bcrypt = require('bcryptjs');
//
// module.exports = function (User) {
//   User.register = async function (username, password, cb) {
//     if (!username || !password) {
//       return cb(null, { error: '请填写完整！' });
//     }

//     const exist = await User.findOne({ where: { username } });
//     if (exist) {
//       return cb(null, { error: '用户已存在！' });
//     }

//     const hashedPassword = await bcrypt.hash(password, 10);
//     const newUser = await User.create({
//       username,
//       password: hashedPassword
//     });

//     cb(null, { message: '注册成功', userId: newUser.id });
//   };
//   User.remoteMethod('register', {
//     http: { path: '/register', verb: 'post' },
//     accepts: [
//       { arg: 'username', type: 'string', required: true },
//       { arg: 'password', type: 'string', required: true }
//     ],
//     returns: { arg: 'user', type: 'object' }
//   });

//   User.login = async function (username, password, cb) {
//     if (!username || !password) {
//       return cb(null, { error: '用户名和密码不能为空' });
//     }
//     const user = await User.findOne({ where: { username } });
//     if (!user) {
//       return cb(null, { error: '用户不存在' });
//     }
//     //验证密码
//     const isMatch = await bcrypt.compare(password, user.password)
//     if (!isMatch) {
//       return cb(null, { error: '密码错误' });
//     }
//     // 登录成功，调用内置 createAccessToken 生成 token
//     const token = await user.createAccessToken(60 * 60 * 24); // 有效期 24 小时（单位：秒）

//     // 登录成功，返回用户信息，但不返回密码
//     const userInfo = user.toJSON();
//     delete userInfo.password;
//     cb(null, {
//       message: '登录成功',
//       user: userInfo,
//       token: token.id,
//       expiresAt: token.expiredAt,
//     });
//   }
//   User.remoteMethod('login', {
//     isStatic: true,
//     http: { path: '/login', verb: 'post' },
//     accepts: [
//       { arg: 'username', type: 'string', required: true, http: { source: 'form' } },
//       { arg: 'password', type: 'string', required: true, http: { source: 'form' } }
//     ],
//     returns: { arg: 'result', type: 'object', root: true }
//   });
// };



'use strict';
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');


// 这个文件是所有接口的api等一下我想到一个我先试一下
module.exports = function (User) {
  // 1. 注册
  // User.register = async function (username, password) {
  //   if (!username || !password) {
  //     throw new Error('请填写完整！');        // LoopBack 会自动 422
  //   }
  //   const exist = await User.findOne({ where: { username } });
  //   if (exist) {
  //     throw new Error('用户已存在！');
  //   }
  //   const hashedPassword = await bcrypt.hash(password, 10);
  //   const newUser = await User.create({ username, password: hashedPassword });
  //   return { message: '注册成功', userId: newUser.id };
  // };
  // 注册并返回 token
  User.register = async function (username, password) {
    if (!username || !password) {
      throw new Error('请填写完整！');
    }
    const exist = await User.findOne({ where: { username } });
    if (exist) {
      throw new Error('用户已存在！');
    }
    // 1. 保存用户
    const hashedPassword = await bcrypt.hash(password, 10);
    const newUser = await User.create({ username, password: hashedPassword });
    // 2. 立即签发 token
    const token = await newUser.createAccessToken(60 * 60 * 24); // 24h
    // 3. 返回安全信息
    const safeUser = newUser.toJSON();
    delete safeUser.password;
    return {
      message: '注册成功',
      user: safeUser,
      token: token.id,
      expiresAt: token.expiredAt
    };
  };
  // 注册接口声明
  User.remoteMethod('register', {
    http: { path: '/register', verb: 'post' },
    accepts: [
      { arg: 'username', type: 'string', required: true },
      { arg: 'password', type: 'string', required: true }
    ],
    returns: { arg: 'result', type: 'object', root: true }
  });

  // // 2. 登录
  // User.login = async function (username, password) {
  //   if (!username || !password) {
  //     throw new Error('用户名和密码不能为空');
  //   }
  //   const user = await User.findOne({ where: { username } });
  //   if (!user) {
  //     throw new Error('用户不存在');
  //   }
  //   const isMatch = await bcrypt.compare(password, user.password);
  //   if (!isMatch) {
  //     throw new Error('密码错误');
  //   }
  //   const token = await user.createAccessToken(60 * 60 * 24); // 24h
  //   const userInfo = user.toJSON();
  //   delete userInfo.password;
  //   return {
  //     message: '登录成功',
  //     user: userInfo,
  //     token: token.id,
  //     expiresAt: token.expiredAt
  //   };
  // };

  User.login = function (credentials, cb) {
    const username = credentials.username;
    const password = credentials.password;

    User.findOne({ where: { username: username } }, function (err, user) {
      if (err || !user) {
        return cb(new Error('用户不存在'));
      }

      // ⚠️ 这里直接用 bcrypt 对比密码字段
      bcrypt.compare(password, user.password, function (err, isMatch) {
        if (err) return cb(err);
        if (!isMatch) return cb(new Error('密码错误'));

        // ✅ 创建 JWT token（你可以使用自己的 secret）
        const token = jwt.sign(
          { id: user.id, username: user.username },
          'your-jwt-secret', // 🛡️替换为你自己的密钥
          { expiresIn: '7d' }
        );

        // 返回 token 和用户信息
        cb(null, {
          token: token,
          user: {
            id: user.id,
            username: user.username,
          },
        });
      });
    });
  };


  User.remoteMethod('login', {
    accepts: { arg: 'credentials', type: 'object', required: true, http: { source: 'body' } },
    returns: { arg: 'result', type: 'object' },
    http: { path: '/login', verb: 'post' },
  });
};
